using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BasicEnemy : MonoBehaviour
{
    public Transform target; // 目标单位的Transform组件 即玩家
    public GameObject bulletPrefab; // 子弹预制体
    public float rotationSpeed = 10f; // 炮台旋转速度
    public float fireRate = 0.7f; // 发射子弹的频率（每秒发射的子弹数）
    private float lastFireTime; // 上一次发射子弹的时间


    private Rigidbody2D rb;
    public Transform leftpoint, rightpoint; //直接用游戏物体去指示左右端点 方便随时调控左右端点
    private bool Faceleft = true; //控制朝向
    public float Speed;
    public float leftx, rightx;


    void Start()
    {
        target = GameObject.Find("player").transform;
        rb = GetComponent<Rigidbody2D>();
        //在初始时就获取数值后


        // laserSpawnPoint = transform.Find("LaserSpawnPoint");
        // smokeSpawnPoint = transform.Find("SmokeSpawnPoint");
        // blueLightSpawnPoint = transform.Find("BlueLightSpawnPoint");
    }

    void Update()
    {
        Move();
        
        if (target != null)
        {
            // 计算目标点的方向向量
            Vector3 direction = target.position - transform.position;
            direction.z = 0f;
            direction.Normalize();

            // 计算旋转角度
            float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f;

            // 旋转炮台
            Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
            transform.rotation = Quaternion.Slerp(transform.rotation, rotation, rotationSpeed * Time.deltaTime);

            // 发射子弹
            if (Time.time - lastFireTime >= 1f / fireRate)
            {
                lastFireTime = Time.time;
                GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
                bullet.GetComponent<Rigidbody2D>().velocity = direction * 10f; // 设置子弹的速度
            }
        }
        
        // // 如果已有3个无人机在攻击，则不再继续攻击
        // if (attackingDrones.Count >= 3)
        // {
        //     return;
        // }

        // // 如果正在冷却，则不再继续攻击
        // if (isCoolingDown)
        // {
        //     return;
        // }

        // // 查找最近的攻击目标
        // FindTarget();

        // // 如果没有攻击目标，则返回
        // if (target == null)
        // {
        //     return;
        // }

        // // 如果攻击目标距离太远，则返回
        // if (Vector2.Distance(transform.position, target.transform.position) > distanceToAttack)
        // {
        //     return;
        // }

        // // 如果正在攻击或者蓄力，则返回
        // if (isAttacking || isCharging)
        // {
        //     return;
        // }

        // // 如果攻击冷却时间未到，则返回
        // if (Time.time - lastAttackTime < attackCooldown)
        // {
        //     return;
        // }

        // // 开始蓄力状态
        // isCharging = true;
        // chargeStartTime = Time.time;
        // blueLightPrefab.SetActive(true);
    }

    //TOOD 移动逻辑
    void Move()
    {
        transform.position = new Vector2(transform.position.x, target.position.y + 6.0f);

        if (Faceleft) { //控制图形的左右朝向
            rb.velocity = new Vector2(-Speed, rb.velocity.y);
            if (transform.position.x < leftx) {
                transform.localScale = new Vector3(-0.2f, 0.2f, 0.4f);
                Faceleft = false;
            }
        }
        else {
            rb.velocity = new Vector2(Speed, rb.velocity.y);
            if (transform.position.x > rightx) {
                transform.localScale = new Vector3(0.2f, 0.2f, 0.4f);
                Faceleft = true;
            }
        }
    }

    //摧毁敌人
    public void Destroy() {
        gameObject.SetActive(false);
    }


    void FixedUpdate()
    {
        // // 如果正在蓄力状态，则继续蓄力
        // if (isCharging)
        // {
        //     // 如果蓄力时间达到了，则开始攻击
        //     if (Time.time - chargeStartTime >= attackChargeTime)
        //     {
        //         attackFinishTime = Time.time + 1f; // 攻击完成时间
        //         isCharging = false; // 结束蓄力状态
        //         isAttacking = true; // 进入攻击状态
        //         blueLightPrefab.SetActive(false); // 隐藏蓝光预制体

        //         // 播放射击动画
        //         StartCoroutine(AttackCoroutine());
        //     }
        //     else
        //     {
        //         // 闪烁蓝光
        //         blueLightPrefab.SetActive(!blueLightPrefab.activeSelf);
        //     }
        // }

        // // 如果正在攻击状态，则发射激光
        // if (isAttacking)
        // {
        //     // 如果攻击时间到了，则结束攻击状态
        //     if (Time.time >= attackFinishTime)
        //     {
        //         isAttacking = false;
        //         lastAttackTime = Time.time;
        //         smokePrefab.SetActive(true); // 显示烟雾预制体
        //         StartCoroutine(CooldownCoroutine()); // 开始冷却
        //     }
        //     else
        //     {
        //         // 产生激光
                
        //     }
        // }
    }

    // 查找最近的攻击目标
    void FindTarget()
    {
        // GameObject[] players = GameObject.FindGameObjectsWithTag("Player");
        // if (players.Length == 0)
        // {
        //     target = null;
        //     return;
        // }

        // GameObject closestPlayer = null;
        // float closestDistance = Mathf.Infinity;

        // foreach (GameObject player in players)
        // {
        //     float distance = Vector2.Distance(transform.position, player.transform.position);
        //     if (distance < closestDistance)
        //     {
        //         closestPlayer = player;
        //         closestDistance = distance;
        //     }
        // }

        // target = closestPlayer;
    }

    // 开始攻击
    // IEnumerator AttackCoroutine()
    // {
    //     // 将攻击的无人机加入列表
    //     attackingDrones.Add(this);

        
    //     // float t = 0;
    //     // while (t < 1f)
    //     // {
    //     //     t += Time.deltaTime;
    //     //     yield return null;
    //     // }

    //     // 蓄力
    //     yield return new WaitForSeconds(attackChargeTime);

    //     // 结束攻击
    //     attackingDrones.Remove(this);
    // }

    // 开始冷却
    // IEnumerator CooldownCoroutine()
    // {
    //     isCoolingDown = true;
    //     yield return new WaitForSeconds(attackCooldownTime);
    //     smokePrefab.SetActive(false); // 隐藏烟雾预制体
    //     isCoolingDown = false;
    // }
}
